package cn.bonoon.kernel.support;

import cn.bonoon.kernel.security.EditableException;

/**
 * <pre>
 * 当前正在操作的操作人员
 * 
 * 在业务逻辑层一律使用这个接口，而不要使用当前登录的用户对象{@link cn.bonoon.kernel.security.StandardLogonUser LogonUser}
 * </pre>
 * @author jackson
 *
 */
public interface IOperator {

	Long getId();

	String getUsername();

	Long getOwnerId();
	
	long toOwnerId();
	
	String getDisplayName();
	
	String getTitle();
	
	boolean isWarning();
	
	/** 对ID进行加密 */
	Long encryptId(Long id);
	long encryptId(long id);
	
	/** 对ID进行解密 */
	Long decryptId(Long id);
	long decryptId(long id);
	
	boolean isSuper(); // 超级管理员（能操作所有子系统）
	boolean isAdmin(); // 普通管理员（能操作被分配角色的子系统）
	
	Object get(String name);
	
	/** 检查当前的用户是否拥有编辑数据的权限 */
	void checkEditable() throws EditableException;
	
	IOperator empty = new IOperator(){

		@Override
		public Long getId() {
			return 0L;
		}

		@Override
		public String getUsername() {
			return "";
		}
		
		@Override
		public String getTitle() {
			return "";
		}

		@Override
		public Long getOwnerId() {
			return 0L;
		}

		@Override
		public long toOwnerId() {
			return 0;
		}

		@Override
		public String getDisplayName() {
			return "";
		}
		@Override
		public Long decryptId(Long id) {
			return id;
		}
		@Override
		public Long encryptId(Long id) {
			return id;
		}

		@Override
		public boolean isSuper() {
			return false;
		}
		@Override
		public boolean isAdmin() {
			return false;
		}

		@Override
		public long encryptId(long id) {
			return id;
		}

		@Override
		public long decryptId(long id) {
			return id;
		}

		@Override
		public Object get(String name) {
			return null;
		}

		@Override
		public void checkEditable() throws EditableException { /* 允许 */ }

		@Override
		public boolean isWarning() {
			return false;
		}
	};
}
